R u Ready? HS2025 | Psychologie der Digitalisierung - Einheit 13

Sandra Grinschgl, Aaron Friedli, Lars Schilling

R u Ready? Reproduzierbare Datenaufbereitung und -analyse mit R

HS 2025


LV-Leitung: Dr. Sandra Grinschgl / MSc. Aaron Friedli
Tutor: BSc. Lars Schilling


13. Einheit, 10.12.2025

Heute:

ANOVA - Analysis of Variance

Testet, ob sich Mittelwerte in mehreren Gruppen unterscheiden

Verschiedene Arten

  • One-Way ANOVA (einfaktoriell):
    Ein Faktor (eine UV) mit mehr als zwei Stufen.

  • Mehrfaktorielle ANOVA:
    Zwei oder mehr Faktoren (UVs).

  • Mixed ANOVA:
    Kombination aus Within-Subject-Faktoren (Messwiederholung) und Between-Subject-Faktoren.

  • Multivariate ANOVA (MANOVA):
    Mindestens zwei abhängige Variablen.

  • ANCOVA:
    Kontrolle für eine zusätzliche Drittvariable (Kovariate).

Voraussetzungen

  • Normalverteilung der abhängigen Variablen
  • Varianzhomogenität (Levene-Test)
  • Sphärizität (Mauchly Test) bei Mixed ANOVA

Einfaktorielle ANOVA

Unterscheiden sich die Mittelwerte der drei Gruppen voneinander?

AV: mean_rl_all

Fixed Effekt: group_all 👉 Dieser Effekt interessiert uns

Random Intercept: (1 | code) 👉 Irrelevant bei One-Way ANOVA wird aber von der Funktion afex verlangt.


leveneTest(mean_rl_all ~ group_all, data = dat_full)
Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)
group   2  0.6889 0.5036
      156               
model_1 <- aov_4(mean_rl_all ~ group_all + (1 | code), data = dat_full)

Output One-Way ANOVA (Beispiel)

model_1 <- aov_4(mean_rl_all ~ group_all + (1 | code), data = dat_full)

summary(model_1)

ANOVA: Different Package - same result

BASE-R


model_aov <- aov(mean_rl_all ~ group_all, data = dat_full)
summary(model_aov)
             Df Sum Sq Mean Sq F value Pr(>F)
group_all     2   2.63   1.317   1.045  0.354
Residuals   156 196.59   1.260               


aov_ez

model_aov_ez <- aov_ez(
  id = "code",
  dv = "mean_rl_all",
  between = "group_all",
  data = dat_full
)

summary(model_aov_ez)
Anova Table (Type 3 tests)

Response: mean_rl_all
          num Df den Df    MSE      F      ges Pr(>F)
group_all      2    156 1.2602 1.0448 0.013218 0.3542

ANOVA: Effektstärken

generalisiertes η2 & partielles η2 - Wie viel Varianz wird durch die Gruppenzugehörigkeit erklärt?

eta_squared(model_1, generalized = TRUE)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (generalized) |       95% CI
---------------------------------------------
group_all |               0.01 | [0.00, 1.00]

- Observed variables: All
- One-sided CIs: upper bound fixed at [1.00].
eta_squared(model_1, partial = TRUE)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 |       95% CI
-------------------------------
group_all | 0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].

Unterschiede generalisiertes und partielles η²


  • Das generalisierte und partielle η²sind beides Masse, welche den Anteil an erklärter Varianz einer abhängigen Variable angeben.


  • Das generalisierte η² berechnet den Anteil der erklärten Varianz einer abhängigen Variable unter Einbezug der gesamten Varianz, also aller Effekte.


  • Das partielle η² beachtet bei der Berechnung des Anteils an erklärter Varianz für die abhängige Variable nicht die gesamte Varianz, sondern nur jene, welche dem zuvor definierten Effekt zugeschrieben werden kann.

Post-Hoc t-Tests mit pairs

Verschiedene Möglichkeiten

  • Klassische t-Tests, wie im Paper und in EH 12


  • Schneller mit pairs(), womit alle möglichen Vergleiche simultan berechnet werden (aber ohne Effektstärken) –> Ergänzung für Fortgeschrittene im Hands-On!


 contrast        estimate    SE  df t.ratio p.value
 above - below    -0.2925 0.218 156  -1.341  0.3747
 above - control  -0.0443 0.218 156  -0.203  0.9775
 below - control   0.2481 0.218 156   1.138  0.4924

P value adjustment: tukey method for comparing a family of 3 estimates 
  • Optimalerweise: Präregistrieren, welche Post-Hoc-Tests berechnet werden und wie diese korrigiert werden sollen

Korrektur für multiples Testen:

Reminder 2x3 ANOVA

AV = Rating

Between Subjects Faktor = Feedbackgruppe (below vs. control vs. above)

Within Subjects Faktor: Messzeitpunkt (Messwiederholter Faktor, pre 1 vs. pre 4)

2x3 mixed ANOVA: Vorbereitungen

Mixed-ANOVA mit afex


AV = Rating


Between Subjects Faktor = Feedbackgruppe (below vs. control vs. above)


Within Subjects Faktor: Messzeitpunkt (Messwiederholter Faktor, pre 1 vs. pre 4)

👉 Long Datensatz

Muster:

mixed_anova <- aov_4(AV ~ between_factor + (messwiederholter_faktor | ID) data = dat_full_long)

Beispielhafter Output mit η2

mixed_anova <- aov_4(rating ~ group_all + (time_rating | code), data = dat_full_long, anova_table = list(es = c("ges" ,"pes")))


summary(mixed_anova)

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                      Sum Sq num Df Error SS den Df  F value
(Intercept)           8198.9      1   500.58    156 2555.113
group_all              126.7      2   500.58    156   19.736
time_rating             42.0      1   288.70    156   22.668
group_all:time_rating   74.4      2   288.70    156   20.090
                                     Pr(>F)    
(Intercept)           < 0.00000000000000022 ***
group_all                     0.00000002286 ***
time_rating                   0.00000436406 ***
group_all:time_rating         0.00000001724 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mixed_anova$anova_table
Anova Table (Type 3 tests)

Response: rating
                      num Df den Df    MSE      F     pes      ges
group_all                  2    156 3.2088 19.736 0.20193 0.138283
time_rating                1    156 1.8507 22.668 0.12687 0.050468
group_all:time_rating      2    156 1.8507 20.090 0.20481 0.086102
                             Pr(>F)    
group_all             0.00000002286 ***
time_rating           0.00000436406 ***
group_all:time_rating 0.00000001724 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mixed_anova <- aov_4(rating ~ group_all + (time_rating | code), data = dat_full_long, anova_table = list(es = c("ges" ,"pes")))


summary(mixed_anova)
mixed_anova$anova_table

Vergleich mit Grinschgl et al. (2021)

Im Paper wurde nur das reine η2 berichtet. Berechnet mit eta_squared() aus dem Package effectsize.

# Effect Size for ANOVA (Type III)

Parameter             | Eta2 |       95% CI
-------------------------------------------
group_all             | 0.12 | [0.05, 1.00]
time_rating           | 0.04 | [0.01, 1.00]
group_all:time_rating | 0.07 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].


We observed a main effect of the factor “feedback group”, F(2, 156) = 19.74, p < 0.001, η2 = 0.12, as well as a main effect of the factor “time of pre-rating”, F(1, 156) = 22.67, p < 0.001, η2 = 0.04. Most importantly, we also found a significant interaction between these factors, F(2, 156) = 20.09, p < 0.001, η2 = 0.07.

Verletzungen der Voraussetzungen in ANOVAs

Normalverteilung (one-way ANOVA)

  • Kruskal-Wallis-Test –> Besonders robust gegen Verletzungen der Normalverteilungsannahme

Varianzhomogenität

  • Einfaktoriell: Welch-ANOVA

Mixed ANOVA

  • Relativ robust gegenüber Verletzungen der Normalverteilung
  • Robuste ANOVA mit WRS2 Paket

  • Multilevel Model mit lme4

Bei Grinschgl et al. (2021) wurde dies aber außer Acht gelassen. Auf jeden Fall sollte man sich im Vorfeld der Datenerhebung überlegen ob und wie man Voraussetzungen überprüft und wie man bei potenziellen Verletzungen vorgeht.

Verletzung Sphärizität

Beispiel aus den Daten Hausübung:

  • Der Mauchly-Test ist relevant bei mindestens drei Within-Faktoren (z.B bei der Hausübung) .

  • Sollte nicht signifikant sein, sodass wir Sphärizität annehmen können (ähnlich zum Levene Test).

  • Der Test wird automatisch ausgegeben. Wenn nicht signifikant ist Sphärizität gegeben, asonsten muss korrigiert werden. 👉 Werte nach Greenhouse-Geisser-Korrektur interpretieren.

    • Diese werden mit model$anova_table automatisch ausgegeben. Mit summary() bekommt man in der ersten Tabelle die unkorrigierten Werte. Beispiel:

Heute haben wir:

  • ANOVAs kennengelernt

  • Post-hoc Tests und Effektstärken berechnet

  • Vorausetzungsprüfungen und Alternativen angeschaut

Bis nächste Woche:

  • Muddiest Points!! Bis Sonntag! siehe Ilias EH 13

  • Hausübung bis Freitag und Peerfeedback bis Mittwoch!

Grinschgl, Sandra, Hauke S. Meyerhoff, Stephan Schwan, and Frank Papenmeier. 2021. “From Metacognitive Beliefs to Strategy Selection: Does Fake Performance Feedback Influence Cognitive Offloading?” Psychological Research 85 (7): 2654–66. https://doi.org/10.1007/s00426-020-01435-9.